home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************************
- TOWNSマルチバッファパターンエディタ
- G-Pen32k ver.1.063 フリコレ用
- Copyright(C) 1991-1994 Okome
- *****************************************************************/
-
- #include <stdio.h>
- #include <io.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #include <fmcfrb.h>
- #include <EGB.H>
- #include <MOS.H>
- #include <kkstr2.h>
- #include <normlib.h>
- #include <okome.h>
- #define MAIN
- #include <GPen32k.h>
- #undef MAIN
- #include <old.h>
- /* #include <rpgpat.h> */
-
- void endu(void)
- {
- if(message2(1, "G-Pen32kを終了します", 2)==0)
- end();
- }
-
- void draw() /* 画面初期化 */
- {
- int i, x, y;
- char c[64] = { 0x00,0x00, 0x10,0x00, 0x00,0x02, 0x10,0x02,
- 0x00,0x40, 0x10,0x40, 0x00,0x42, 0x10,0x42,
- 0x08,0x21, 0x1f,0x00, 0xe0,0x03, 0xff,0x03,
- 0x00,0x7c, 0x1f,0x7c, 0xe0,0x7f, 0xff,0x7f };
- char *tl[] = {"~","/","□","■","○","●","楕○","楕●","↑↓","←→",
- "Poly","塗","Copy","Roll","ぼけ","回転","拡縮","反転",
- "mono","mono",
- "⇔","⇔重","~","Roll","色々","もわ" };
- wpg(0);
- EGB_tmenuPalette2( work );
- MEN_sidein(2); /* メニューへのサイドワークの追加 */
- MEN_set(2);
- font12( 592, 16, "大 終", 15 );
- /* font12( 615, 16, "終", 15 ); */
- boxf( 0, 20, 639, 479, BCL );
- KAN_disp(KAN_DISPON);
- KAN_setMode(0x30140);
- wpg(1);
- EGB_displayStart( work, 2, bi, bi );
- EGB_displayStart( work, 3, 640/bi, 480/bi );
- egbputZ( CSX1, CSY1, CSX2, CSY2, 16, 1, c );
- colmix(1, 0);
- colmix(2, 1);
- wpg(0);
- biboxbf( WX1, WY1, WX2, WY2, 0, 8, 8 );
- biboxbf( BX1, BY1, BX2, BY2, 0, 8, 8 );
- biboxbf( NX1, NY1, NX2, NY2, 0, 4, 4 );
- biboxbf( CSX1, CSY1, CSX2, CSY2, 0, 2, 2 );
- biubox( CBLX1-1, CBY1-1, CBRX2+1, CBY2+1, 15, 8, BCL );
- biubox( CBX1, CBY1, CBX2, CBY2, 8, 15, 0 );
- biubox( CBLX1, CBLY1, CBLX2, CBLY2, 8, 15, 0 );
- biubox( CBRX1, CBRY1, CBRX2, CBRY2, 8, 15, 0 );
- ubox( CSBX1, CSBY1, CSBX2, CSBY2, 15, 8 );
- for ( i = 0; i < MEZ0; i++ ) {
- x = i % MEX2;
- y = i / MEX2;
- uboxf( MEX1+MEX4*x, MEY1+MEY4*y,
- MEX1+MEX4*(x+1)-1, MEY1+MEY4*(y+1)-1, 15, 8, (i<MEZ1) ? 7 : 12 );
- symbol(MEX1+MEX4*x+MEX4/2-strlen(tl[i])*4,MEY1+MEY4*y+18,
- tl[i], 16, 15 );
- }
- wkugiri(1);
- biubox( PALX-32/bi, PALY-28/bi, PALX+127+6/bi, PALY+PALB*3-1+4/bi,
- 15, 8, BCL );
- biubox( PALX, PALY, PALX+127, PALY+PALB*3-1, 8, 15, 0 );
- biboxbf( PCX1, PCY1, PCX2, PCY2, 0, 0, 0 );
- biboxbf( PLX1, PLY1, PLX2, PLY2, 0, 0, 0 );
- biboxbf( PRX1, PRY1, PRX2, PRY2, 0, 0, 0 );
- ubox( SPX1, SPY1, SPX2, SPY2, 15, 8 );
- ubox( RX1, RY1, RX2, RY2, 15, 8 );
- font12( SPX1+6, SPY2-4, "SPOIT", 15 );
- ubox( PAX1, PAY1, PAX2, PAY2, 8, 15 );
- ubox( HX1, HY1, HX2, HY2, 8, 15 );
- bfgs(1);
- svpp(VX1+128);
- wpg(1);
- hsrg(-1);
- mbclp();
- page(0);
- }
-
- void gmenu( int mx, int my ) /* アイコンMENU */
- {
- int x, y, i, j;
-
- i = (( mx - MEX1 ) / MEX4) + MEX2 * (( my - MEY1 ) / MEY4);
- j = ( i<MEZ1 ) ? 0 : 1 ;
- x = MEX1 +((mei[j] + j * MEZ1) % MEX2)* MEX4;
- y = MEY1 + (mei[j] + j * MEZ1) / MEX2 * MEY4;
- mei[j] = i - j * MEZ1;
- mx = MEX1 +(i % MEX2)* MEX4;
- my = MEY1 + i / MEX2 * MEY4;
- wpg(0);
- ubox( x, y, x+MEX4-1, y+MEY4-1, 15, 8 );
- ubox( mx, my, mx+MEX4-1, my+MEY4-1, 8, 15 );
- wpg(1);
- }
-
- void raten( int mb, int cx, int cy, int x1, int y1, int x2, int y2,
- int sx1, int sy1, int sx2, int sy2 )
- {
- char pa[64], pab[64];
- int n, ws, a, b2, mx, my, c, d;
- int x, y, x3, y3, x4, y4, x5, y5, x6, y6, x7=0, y7=0, x8, y8;
- double ls, xx, yy, ax, ay;
- view( WX1,WY1, WX2,WY2 );
- egbget(x1,y1,x2,y2, b);
- vput2(640/bi,0, 640/bi+x2-x1,y2-y1, b);
- EGB_writePage( work, 0 );
- EGB_writeMode( work, 4 );
- x3 = x1*bi; y3 = y1*bi;
- x4 = x2*bi; y4 = y1*bi;
- x5 = x2*bi; y5 = y2*bi;
- x6 = x1*bi; y6 = y2*bi;
- MOS_disp(0);
- connect(5, x3,y3, x4,y3, x4,y4, x3,y4, x3,y3, 0x02, 0x7fff );
- MOS_disp(1);
- cx /= bi;
- cy /= bi;
- mbout( &mb, &mx, &my );
- mbin( &mb, &x8, &y8 );
- do {
- MOS_rdpos( &mb, &x, &y );
- if (x7 != x || y7 != y) {
- MOS_disp(0);
- connect(5, x3,y3, x4,y4, x5,y5, x6,y6, x3,y3, 0x02, 0x7fff );
- MOS_disp(1);
- ls = atan2(x8-cx*bi, y8-cy*bi) - atan2(x-cx*bi,y-cy*bi);
- xx = x1 - cx;
- ax = x2 - cx;
- yy = y1 - cy;
- ay = y2 - cy;
- x3 = (cx + xx * cos(ls) - yy * sin(ls))*bi;
- y3 = (cy + xx * sin(ls) + yy * cos(ls))*bi;
- x4 = (cx + ax * cos(ls) - yy * sin(ls))*bi;
- y4 = (cy + ax * sin(ls) + yy * cos(ls))*bi;
- x5 = (cx + ax * cos(ls) - ay * sin(ls))*bi;
- y5 = (cy + ax * sin(ls) + ay * cos(ls))*bi;
- x6 = (cx + xx * cos(ls) - ay * sin(ls))*bi;
- y6 = (cy + xx * sin(ls) + ay * cos(ls))*bi;
- MOS_disp(0);
- connect(5, x3,y3, x4,y4, x5,y5, x6,y6, x3,y3, 0x02, 0x7fff );
- MOS_disp(1);
- x7 = x;
- y7 = y;
- }
- } while (mb);
- MOS_disp(0);
- connect(5, x3,y3, x4,y4, x5,y5, x6,y6, x3,y3, 0x02, 0x7fff );
- MOS_disp(1);
- EGB_writeMode( work, 0 );
- EGB_writePage( work, 1 );
- WORD(pa) = 4;
- WORD(pa+2) = sx1;
- WORD(pa+4) = sy1;
- WORD(pa+6) = sx2;
- WORD(pa+8) = sy1;
- WORD(pa+10) = sx2;
- WORD(pa+12) = sy2;
- WORD(pa+14) = sx1;
- WORD(pa+16) = sy2;
- EGB_region( work, &n, &ws, &a, &b2, &c, &d, pa );
- pab[0] = 1;
- pab[1] = 0;
- WORD(pab+2) = (cx-x1)/KS+sx1;
- WORD(pab+4) = (cy-y1)/KS+sy1;
- ls *= 180.0 / _PI;
- if (ls<0)
- ls+=360.0;
- if (ls>=360.0)
- ls-=360.0;
- WORD(pab+6) = (int)ls;
- EGB_rotate( work, 0, pab, b );
- wkk();
- }
-
- void ten(int x, int y, int h)
- {
- int i;
- egbget(x,y,x+h-1,y+h-1, b);
- for ( i=0; i<h; i++ )
- vput2(x+i,y,x+i,y+h-1, &b[h*(h-i-1)*2]);
- }
-
- void rollsub( int x3, int y3, int X1, int Y1, int X3, int Y3 )
- {
- int X2, Y2, Y4;
- X2 = X1+X3;
- Y2 = Y1+Y3;
- Y4 = Y3+1;
- egbget( X1, Y1, X1+(x3-1 & X3), Y2, b );
- egbget( X1+x3, Y1, X2, Y2, &(b[x3*Y4*2]) );
- vput2( X2-(x3-1 & X3), Y2-(y3-1 & Y3), X2, Y2, b );
- vput2( X2-(x3-1 & X3), Y1, X2, Y2-y3, &(b[x3*y3*2]) );
- vput2( X1, Y2-(y3-1 & Y3), X2-x3, Y2, &(b[x3*Y4*2]) );
- vput2( X1, Y1, X2-x3, Y2-y3, &(b[(x3*Y4+(X3-x3+1)*y3)*2]) );
- }
-
- void rollsander( int mb, int mx, int my )
- {
- int x2, y2;
- mx = wnx(mx);
- my = wny(my);
- do {
- MOS_rdpos( &mb, &x2, &y2 );
- rollsub( mx - wnx(x2) & NX3, my - wny(y2) & NY3, NX1, NY1, NX3, NY3 );
- if (NX4!=WX4)
- wkk();
- mx = wnx(x2);
- my = wny(y2);
- } while (mb);
- }
-
- void tometen(int x1, int y1, int x2, int y2)
- {
- int x, y, mb;
- wpg(0);
- for (y = y1; y<=y2; y++) {
- EGB_writePage(work,1);
- egbget(x1,y,x2,y,b);
- EGB_writePage(work,0);
- for (x = x1; x<=x2; x++) {
- if ((WORD(b+(x-x1)*2) & 0x8000)!=0) {
- line(x*bi,y*bi,(x+1)*bi-1,(y+1)*bi-1,15);
- line((x+1)*bi-1,y*bi,x*bi,(y+1)*bi-1,8);
- }
- }
- }
- MOS_typeRom2( 76, 8, 8, mpat );
- wpg(1);
- mbin(&mb,&x,&y);
- mbout(&mb,&x,&y);
- wpg(0);
- boxf(x1*bi,y1*bi,(x2+1)*bi-1,(y2+1)*bi-1,0);
- MOS_typeRom2( 81, 1, 1, mpat );
- wpg(1);
- }
-
- void vtengh(void)
- {
- int x, y, h, s, v;
- char *p;
- p = b;
- c32toHSV(mcl[0], &h,&s,&v);
- for (y=0; y<256; y+=2)
- for (x=0; x<256; x+=2) {
- WORD(p) = HSVto32k(h, y, x);
- p+=2;
- }
- vput2(BX1,BY1,BX2,BY2,b);
- }
-
- void vtengs(void)
- {
- int x, y, h, s, v;
- char *p;
- p = b;
- c32toHSV(mcl[0], &h,&s,&v);
- for (y=0; y<256; y+=2)
- for (x=0; x<512*3; x+=12) {
- WORD(p) = HSVto32k(x, s, y);
- p+=2;
- }
- vput2(BX1,BY1,BX2,BY2,b);
- }
-
- void vtengv(void)
- {
- int x, y, h, s, v;
- char *p;
- p = b;
- c32toHSV(mcl[0], &h,&s,&v);
- for (y=0; y<256; y+=2)
- for (x=0; x<512*3; x+=12) {
- WORD(p) = HSVto32k(x, y, v);
- p+=2;
- }
- vput2(BX1,BY1,BX2,BY2,b);
- }
-
- /* 編集窓用機能軍 */
-
- void mpaint( int mb, int mx, int my )
- {
- char pa[4];
- EGB_paintMode( work, 0x22 );
- EGB_color( work, 2, mcl[mb] );
- WORD(pa) = wnx(mx);
- WORD(pa+2) = wny(my);
- EGB_closePaint( work, pa );
- wkk();
- }
-
- void mdr( int mb, int mx, int my ) /* 編集窓描画 */
- {
- int mx2, my2, x, y, x2, y2;
- mx2 = mx;
- my2 = my;
- while (mb != 0 && mx/bi >= WX1 && mx/bi <= WX2
- && my/bi >= WY1 && my/bi <= WY2 )
- {
- EGB_writeMode( work, (vr==128) ? 0 : 7 );
- EGB_pastel( work, vr*2 );
- line( wnx(mx2), wny(my2), wnx(mx), wny(my), mcl[mb] );
- EGB_writeMode( work, 0 );
- EGB_pastel( work, 128 );
- x = wnx(mx);
- x2 = wnx(mx2);
- bsz( &x, &x2 );
- y = wny(my);
- y2 = wny(my2);
- bsz( &y, &y2 );
- egbget( x, y, x2, y2, b );
- egbputZ( WX1+(x-NX1)*KS, WY1+(y-NY1)*KS,
- WX1+(x2-NX1+1)*KS-1, WY1+(y2-NY1+1)*KS-1,
- x2-x+1, y2-y+1, b );
- mx2 = mx;
- my2 = my;
- MOS_rdpos( &mb, &mx, &my );
- }
- }
-
- void mwwp( int *mb, int *mx, int *my, int *x, int *y, void (*vfp)(), int f )
- {
- int x2, y2, b2;
- view( WX1,WY1, WX2,WY2 );
- umosv( WX1,WY1, WX2,WY2 );
- EGB_writeMode( work, 4 );
- *mx = wcx(*mx);
- *my = wcy(*my);
- vfp( *mx, *my, *mx, *my, 0x7fff );
- x2 = *mx;
- y2 = *my;
- do {
- b2 = *mb;
- MOS_rdpos( mb, x, y );
- *x = wcx(*x);
- *y = wcy(*y);
- if (*x != x2 || *y != y2 ) {
- vfp( *mx, *my, x2, y2, 0x7fff );
- vfp( *mx, *my, *x, *y, 0x7fff );
- }
- x2 = *x;
- y2 = *y;
- } while (*mb);
- if (f==0)
- vfp( *mx, *my, x2, y2, 0x7fff );
- *mb = b2;
- }
-
- void mline( int mb, int mx, int my, void (*vic)() )
- {
- int x, y;
- mwwp( &mb, &mx, &my, &x, &y, vic, 0 );
- view( NX1,NY1, NX2,NY2 );
- EGB_writeMode( work, (vr==128) ? 0 : 7 );
- EGB_pastel( work, vr*2 );
- vic( nbx(mx), nby(my), nbx(x), nby(y), mcl[mb] );
- EGB_writeMode( work, 0 );
- EGB_pastel( work, 128 );
- wkk();
- }
-
- void mcpyl( int mb, int mx, int my, int c )
- {
- int x, y, x2, y2, x3, y3;
- mwwp( &mb, &mx,&my, &x,&y, boxb, 0 );
- bsz( &mx, &x );
- bsz( &my, &y );
- egbget( nbx(mx),nby(my), nbx(x),nby(y), b );
- boxb( mx, my, x, y, 0x7fff );
- mbin( &mb, &x3, &y3 );
- if (mb == 1) {
- if (c) {
- EGB_writeMode( work, 0 );
- boxf(wnx(mx),wny(my), wnx(x), wny(y), mcl[2] );
- EGB_writeMode( work, 4 );
- }
- x3 = wcx(x3);
- y3 = wcy(y3);
- mx -= x3;
- my -= y3;
- x -= x3;
- y -= y3;
- do {
- MOS_rdpos( &mb, &x2, &y2 );
- x2 = wcx(x2);
- y2 = wcy(y2);
- while ( x2+x > WX2 )
- x2-=KS;
- while ( y2+y > WY2 )
- y2-=KS;
- while ( x2+mx < WX1 )
- x2+=KS;
- while ( y2+my < WY1 )
- y2+=KS;
- if (x3 != x2 || y3 != y2 ) {
- boxb( x3+mx,y3+my, x3+x,y3+y, 0x7fff );
- boxb( x2+mx,y2+my, x2+x,y2+y, 0x7fff );
- }
- x3 = x2;
- y3 = y2;
- } while (mb);
- view( NX1,NY1, NX2,NY2 );
- vput2( nbx(x3+mx),nby(y3+my), nbx(x3+x),nby(y3+y), b );
- }
- EGB_writeMode( work, 0 );
- wkk();
- }
-
- /*
- void boke(int mx, int my, int x, int y)
- {
- int n=0x80, si, x1, y1, x2, y2;
- char pa[64];
- WORD(pa+0)=4;
- WORD(pa+2)=mx;
- WORD(pa+4)=my;
- WORD(pa+6)=x;
- WORD(pa+8)=my;
- WORD(pa+10)=x;
- WORD(pa+12)=y;
- WORD(pa+14)=mx;
- WORD(pa+16)=y;
- EGB_region( work, &n, &si, &x1,&y1, &x2,&y2, pa );
- EGB_resolve(work,b);
- }
- */
-
- void hten(int x, int y, int x2, int y2)
- {
- EGB_writeMode( work, 4 );
- boxf( x,y, x2,y2, 0x7fff );
- EGB_writeMode( work, 0 );
- }
-
- void monocol(int x, int y, int x2, int y2)
- {
- int i,h,s,v;
- if (x2<x) { i=x; x=x2; x2=i; }
- if (y2<y) { i=y; y=y2; y2=i; }
- egbget(x,y,x2,y2,b);
- for (i = 0; i<(x2-x+1)*(y2-y+1)*2; i+=2) {
- c32toHSV(WORD(b+i),&h,&s,&v);
- WORD(b+i) = (v>>3) * 0x421 | (WORD(b+i) & 0x8000);
- }
- vput2(x,y,x2,y2,b);
- }
-
- void monocol2(int x, int y, int x2, int y2)
- {
- int i, gc,rc,bc;
- if (x2<x) { i=x; x=x2; x2=i; }
- if (y2<y) { i=y; y=y2; y2=i; }
- egbget(x,y,x2,y2,b);
- for (i = 0; i<(x2-x+1)*(y2-y+1)*2; i+=2) {
- gc = (WORD(b+i) >> 10) & 0x1f;
- rc = (WORD(b+i) >> 5) & 0x1f;
- bc = WORD(b+i) & 0x1f;
- WORD(b+i) = (gc+rc+bc+1) / 3 * 0x421 | (WORD(b+i) & 0x8000);
- }
- vput2(x,y,x2,y2,b);
- }
-
- void tens(int mb, int mx, int my, void (*vic)())
- {
- int x, y;
- mwwp( &mb, &mx,&my, &x,&y, boxb, 0 );
- EGB_writeMode( work, 0 );
- view(NX1,NY1,NX2,NY2);
- mx = nbx(mx);
- my = nby(my);
- x = nbx(x);
- y = nby(y);
- vic(mx,my,x,y);
- wkk();
- }
-
- void kakshk(int mb, int mx, int my)
- {
- int x, y, x2, y2, ox, oy, ox2, oy2;
- ox = mx;
- oy = my;
- mwwp( &mb, &ox,&oy, &ox2,&oy2, boxb, 0 );
- egbget( nbx(ox),nby(oy), nbx(ox2),nby(oy2), b );
- boxb(ox,oy,ox2,oy2,0x7fff);
- x2 = abs(nbx(ox2)-nbx(ox))+1;
- y2 = abs(nby(oy2)-nby(oy))+1;
- mbin(&mb,&mx,&my);
- mwwp( &mb, &mx,&my, &x,&y, boxb, 0 );
- boxb(ox,oy,ox2,oy2,0x7fff);
- EGB_writeMode(work,0);
- egbputZ( nbx(mx),nby(my), nbx(x),nby(y), x2,y2, b );
- wkk();
- }
-
- void polys( int mb, int mx, int my, char *b )
- {
- int i=6, x, y, ox, oy;
- view( WX1,WY1, WX2,WY2 );
- umosv( WX1,WY1, WX2,WY2 );
- ox = mx;
- oy = my;
- WORD(b+2) = wnx(mx);
- WORD(b+4) = wny(my);
- EGB_writeMode(work,4);
- line( wcx(mx),wcy(my), wcx(mx),wcy(my), 0x7fff );
- while(mb!=2 && i<1020) {
- do {
- x = mx;
- y = my;
- MOS_rdpos(&mb,&mx,&my);
- if (wcx(x)!=wcx(mx) || wcy(y)!=wcy(my)) {
- line( wcx(ox),wcy(oy), wcx(x),wcy(y), 0x7fff );
- line( wcx(ox),wcy(oy), wcx(mx),wcy(my), 0x7fff );
- }
- } while(mb==0 || (mb==1 && wcx(ox)==wcx(mx) && wcy(oy)==wcy(my)));
- ox = mx;
- oy = my;
- WORD(b+i) = wnx(mx);
- WORD(b+i+2) = wny(my);
- i+=4;
- }
- WORD(b)=(i-2)/4;
- view( NX1,NY1, NX2,NY2 );
- EGB_writeMode( work, 0 );
- }
-
- void polyg( int mb, int mx, int my )
- {
- polys(mb, mx, my, b);
- EGB_writeMode( work, (vr==128) ? 0 : 7 );
- EGB_pastel( work, vr*2 );
- EGB_paintMode(work, 0x22);
- EGB_color(work, 0, mcl[1]);
- EGB_color(work, 2, mcl[1]);
- EGB_polygon( work, b );
- EGB_writeMode( work, 0 );
- EGB_pastel( work, 128 );
- wkk();
- mbout(&mb,&mx,&my);
- }
-
- void polyboke( int mb, int mx, int my )
- {
- int n=0x80, si, x1, y1, x2, y2;
- char pa[2048];
- polys(mb, mx, my, pa);
- if (WORD(pa) >= 3) {
- EGB_region( work, &n, &si, &x1,&y1, &x2,&y2, pa );
- EGB_resolve(work, b);
- }
- wkk();
- mbout(&mb, &mx, &my);
- }
-
- void mnw( int mb, int mx, int my ) /* 編集窓 */
- {
- view( NX1, NY1, NX2, NY2 );
- switch(mei[0])
- {
- case 1: mline( mb, mx, my, line ); break;
- case 2: mline( mb, mx, my, boxb ); break;
- case 3: mline( mb, mx, my, boxf ); break;
- case 4: mline( mb, mx, my, circlen2 ); break;
- case 5: mline( mb, mx, my, circlef2 ); break;
- case 6: mline( mb, mx, my, circlenl ); break;
- case 7: mline( mb, mx, my, circlefl ); break;
- case 8: tens(mb, mx, my, udten); break;
- case 9: tens(mb, mx, my, lrten); break;
- case 10: polyg( mb, mx, my ); break;
- case 11: mpaint( mb, mx, my ); break;
- case 12: mcpyl( mb, mx, my, 0 ); break;
- case 13: rollsander( mb, mx, my ); break;
- /* case 14: tens( mb, mx, my, boke ); break; */
- case 14: polyboke( mb, mx, my ); break;
- case 15: raten( mb, mx, my, WX1, WY1, WX2, WY2, NX1, NY1, NX2, NY2 );
- break;
- case 16: kakshk( mb, mx, my ); break;
- case 17: tens( mb, mx, my, hten ); break;
- case 18: tens( mb, mx, my, monocol2 ); break;
- case 19: tens( mb, mx, my, monocol ); break;
- default: mdr( mb, mx, my ); break;
- }
- mosv( 0,0, 639,479 );
- view( 0, 0, 1024/bi-1, 512/bi-1 );
- }
-
- void mbwk( int mx, int my, int c ) /* バッファセット用枠 */
- {
- static int x = 0, y = 512, c2 = 0;
- int mx2, my2;
- if ( mx/bi < BX1 || mx/bi > BX2 || my/bi < BY1 || my/bi > BY2 )
- c = 0;
- if ( c == 0 ) {
- if ( c2 != 0 ) {
- wpg(0);
- boxb( x, y, x+NX4*bi-1, y+NY4*bi-1, 0 );
- wpg(1);
- y = 512;
- }
- } else {
- mx2 = gpx(mx)*bi;
- my2 = gpy(my)*bi;
- if ( x != mx2 || y != my2 || c2 == 0 ) {
- wpg(0);
- boxb( x, y, x+NX4*bi-1, y+NY4*bi-1, 0 );
- boxb( mx2, my2, mx2+NX4*bi-1, my2+NY4*bi-1, 15 );
- wpg(1);
- x = mx2;
- y = my2;
- }
- }
- c2 = c;
- }
-
- void bfsrgp( int mb, int mx, int my ) /* 重ね合わせ */
- {
- int mx2, my2;
- mx2 = gpx(mx);
- my2 = gpy(my);
- if (mb == 1) {
- wget();
- vput2(mx2, my2, mx2+NX3, my2+NY3, wb );
- } else {
- egbget( NX1, NY1, NX2, NY2, b );
- egbget(mx2, my2, mx2+NX3, my2+NY3, wb );
- vput2( 320, 0, 320+NX3, NY3, wb );
- EGB_color( work, 3, mcl[2] );
- EGB_writeMode( work, 6 );
- egbput( 320, 0, 320+NX3, NY3, b );
- EGB_writeMode( work, 0 );
- egbget( 320, 0, 320+NX3, NY3, wb );
- wput();
- }
- }
-
- void bfdraw( int mb, int mx, int my )
- {
- int mx2, my2;
- mx2 = mx;
- my2 = my;
- while (mb != 0) {
- if (mx2/bi < BX1 || mx2/bi > BX2 || my2/bi < BY1 || my2/bi > BY2 )
- break;
- line( mx2/bi, my2/bi, mx/bi, my/bi, mcl[mb] );
- mx2 = mx;
- my2 = my;
- MOS_rdpos( &mb, &mx, &my );
- }
- }
-
- void cols16(int mb, int mx, int my)
- {
- int i;
- if (mb==1) {
- i=(mx-CSX1)/CSX4;
- boxf(CSX1+i*CSX4,CSY1,CSX1+i*CSX4+CSX3,CSY2,mcl[1]);
- } else {
- egbget( mx,my, mx,my, b );
- mcl[1] = WORD(b);
- mbclp();
- }
- }
-
- void cols16g(int mb)
- {
- int f, i, j, k=0;
- egbget(NX1,NY1,NX2,NY2,b);
- for ( i=0; i<16; i++ ) {
- WORD(b+32768+i*2) = 0;
- }
- for (i = 0; i < NX4*NY4*2; i+=2) {
- f = 0;
- for (j=0; j<k; j++) {
- if (WORD(b+32768+j*2)==WORD(b+i)) {
- f = 1;
- break;
- }
- }
- if (f==0) {
- WORD(b+32768+k*2) = WORD(b+i);
- k++;
- }
- if (k>15)
- break;
- }
- egbget(CSX1, CSY1, CSX2-CSX4*k, CSY2, b+65536);
- vput2(CSX1+CSX4*k, CSY1, CSX2, CSY2, b+65536);
- egbputZ(CSX1, CSY1, CSX1+CSX4*k-1, CSY2, k,1, b+32768);
- mbout(&mb,&i,&j);
- }
-
- void brolls( int mb, int mx, int my )
- {
- int x2, y2, x3, y3;
- mx = mx/bi;
- my = my/bi;
- do {
- MOS_rdpos( &mb, &x2, &y2 );
- x3 = mx - x2/bi & BX3;
- y3 = my - y2/bi & BY3;
- rollsub( x3, y3, BX1, BY1, BX3, BY3 );
- mx = x2/bi;
- my = y2/bi;
- } while (mb);
- }
-
- void colch(int mb, int mx, int my)
- {
- egbget( BX1,BY1, BX2,BY2, b );
- boxf( BX1,BY1, BX2,BY2, mcl[1] );
- EGB_writeMode(work,6);
- EGB_color(work,3,mcl[2]);
- egbput( BX1,BY1, BX2,BY2, b );
- EGB_writeMode(work,0);
- mbout(&mb, &mx, &my);
- }
-
- void pastgo(int mb, int mx, int my)
- {
- int mx2, my2;
- mx2 = gpx(mx);
- my2 = gpy(my);
- if (mb == 1) {
- wget();
- vput2(mx2, my2, mx2+NX3, my2+NY3, wb );
- } else {
- egbget(mx2, my2, mx2+NX3, my2+NY3, wb );
- EGB_writeMode( work, 7 );
- egbput( NX1, NY1, NX2, NY2, wb );
- EGB_writeMode( work, 0 );
- wkk();
- mbout(&mb,&mx,&my);
- }
- }
-
- void mbuff( int mb, int mx, int my ) /* バッファ */
- {
- void (*(vb[]))() ={ bfgp, bfsrgp, bfdraw, brolls, colch, pastgo};
- view( BX1, BY1, BX2, BY2 );
- vb[((mei[1]<6) ? mei[1] : 0)](mb, mx, my);
- view( 0, 0, 1024/bi-1, 512/bi-1 );
- }
-
- int OKM_fsel2( char *nn, char *tt, int f )
- {
- if (OKM_fsel( nn, tt, 0 ) == 0 )
- return ((f!=0) ? sachk(nn) : 0 );
- else
- return (1);
- }
-
- void OKM_fsel3( char *nn, char *tt, int (*vp)(char *na), int f )
- {
- if (OKM_fsel2( nn, tt, f ) == 0)
- vp( nn );
- }
-
- /*
- int tomself(char *nn, char *ext )
- {
- int ret;
- EGB_writePage(work,0);
- ret = TOM_filesel( work, nn, ext, 224, 60 );
- EGB_writePage(work,1);
- return (ret);
- }
-
- void tomself2(char *nn, char *ext, int (*fads)(char *, char *, int, int ) )
- {
- if (tomself( nn, ext ) != 1)
- fads( work, nn, BX1, BY1 );
- }
- */
- /*
- void mos2c(int mx, int my, int x1, int y1, int x2, int y2, void (*vf)())
- {
- if ( x1 >= mx && mx <= x2 && y1 <= my && my <= y2 )
- vf(mb, mx, my);
- }
- */
-
- void mosmen(int mb, int mx, int my)
- {
- static char nn[FILENAME_MAX];
-
- switch(MEN_menu( mb, mx, my ))
- {
- case 1:
- message2(4, "G-Pen32k ver.1.063",
- "Free Software Collection Version",
- __DATE__" "__TIME__" Compiled.",
- "Copyright(C) 1991-1994 OKOME", 1);
- break;
- case 101:
- if (OKM_fsel2( nn, "TIFF読み込み", 0 ) == 0) {
- EGB_color(work, 0, mcl[1]);
- tiffload(nn, BX1, BY1);
- }
- break;
- case 102:
- if (OKM_fsel2( nn, "TIFF保存", 1 ) == 0)
- tiffsave(nn, BX1, BY1, BX2, BY2, 0, 0);
- break;
- case 103:
- if (OKM_fsel2( nn, "TIFF圧縮保存", 1 ) == 0) {
- MOS_typeRom2(82,16,16,mpat);
- tiffsave(nn, BX1, BY1, BX2, BY2, 1, 0);
- MOS_typeRom2(81,0,0,mpat);
- }
- break;
- case 104:
- if (OKM_fsel2( nn, "SPRITEload", 0 ) == 0)
- sprload( nn, BX1, BY1 );
- break;
- case 105:
- if (OKM_fsel2( nn, "SPRITEsave", 1 ) == 0)
- sprsave( nn, BX1, BY1 );
- break;
- case 106:
- if (OKM_fsel2( nn, "PATTERN4load", 0 ) == 0)
- ptnload4pg( nn, NX4,NY4 );
- break;
- case 107:
- if (OKM_fsel2( nn, "PATTERN4save", 1 ) == 0)
- ptnsave4pg( nn, NX4,NY4 );
- break;
- case 108: OKM_fsel3( nn, "16色LOAD", ptr16dlo, 0 ); break;
- case 109: OKM_fsel3( nn, "16色化SAVE", ptr16dsa, 1 ); break;
- case 110: OKM_fsel3( nn, "C言語保存", cdasave, 1 ); break;
- /* case 201: tomself2( nn, "*.pat", loadpat ); break;
- case 202: tomself2( nn, "*.pat", savepat ); break;
- case 203:
- if (tomself( nn, "*.spr" ) != 1) {
- loadpeo( nn, b, vp0 );
- vput2( BX1,BY1, BX2,BY2, vp);
- }
- break;
- case 204:
- if (tomself( nn, "*.spr" ) != 1) {
- egbget( BX1, BY1, BX2, BY2, vp );
- savepeo( work, nn, b, vp0 );
- }
- break;
- case 205:
- if (tomself( nn, "*.ano" ) != 1) {
- loadano( work, nn, BX1, BY1 );
- vput2( BX1,BY1, BX2,BY2, vp);
- }
- break;
- case 206: tomself2( nn, "*.ano", saveano ); break;
- case 207: tomself2( nn, "*.fce", loadkao ); break;
- case 208: tomself2( nn, "*.fce", savekao ); break;
- case 209: tomself2( nn, "*.til", loadtil ); break;
- case 210: tomself2( nn, "*.til", savetil ); break;
- */ case 201: wpg(0); wkugiri(3); wpg(1); break;
- case 202: wpg(0); wkugiri(2); wpg(1); break;
- case 203: ten(NX1,NY1,NX4); wkk(); break;
- case 204: ten(BX1,BY1,BX4); break;
- case 205: vtengh(); break;
- case 206: vtengs(); break;
- case 207: vtengv(); break;
- case 208: tometen(BX1,BY1,BX2,BY2); break;
- case 209:
- EGB_writeMode( work, 10 );
- boxf(BX1-1, BY1-1, BX2+1, BY2+1,0x8000);
- EGB_writeMode( work, 0 );
- break;
- case 210:
- EGB_writeMode( work, 11 );
- boxf(BX1-1, BY1-1, BX2+1, BY2+1,0x8000);
- EGB_writeMode( work, 0 );
- break;
- case 9998: wsize(mb,1); break;
- case 5:
- case 9999: endu(); break;
- default: break;
- }
- }
-
- void keymod(unsigned int kb)
- {
- switch(kb)
- {
- case 0x8016:
- case 0x9: page(-1); break;
- case 0x8017:
- case 0x1b: page( 1); break;
- case 'A': aqy(); break;
- case 'B': hten(NX1,NY1,NX2,NY2); wkk(); break;
- case 'C': wcls(); break;
- case 'D': bcls(); break;
- case 'F': udten(NX1,NY1,NX2,NY2); wkk(); break;
- case 'G': lrten(NX1,NY1,NX2,NY2); wkk(); break;
- case 'H': hten(BX1,BY1,BX2,BY2); break;
- case 'K': ten(NX1,NY1,NX4); wkk(); break;
- case 'M': monocol(BX1,BY1,BX2,BY2); break;
- case 'Q': aqx(); break;
- case 'S': vtengs(); break;
- case 'V': vtengv(); break;
- case 'W': vtengh(); break;
- case 'X': lrten(BX1,BY1,BX2,BY2); break;
- case 'Y': ten(BX1,BY1,BX4); break;
- case 'Z': udten(BX1,BY1,BX2,BY2); break;
- case 0x801D: endu(); break;
- default:
- if (strchr(MEN_skey,kb-'a'+'A')!=NULL)
- MEN_sideexec(strchr(MEN_skey,kb-'a'+'A')-MEN_skey+1);
- break;
- }
- }
-
- void mouse() /* マウス総合領域 */
- {
- int mb, mx, my, mx2, my2;
- unsigned int kb, en;
- while(1) {
- MOS_rdpos( &mb, &mx, &my );
- mx2 = mx / bi;
- my2 = my / bi;
- mbwk( mx, my, ( mei[1] == 2 || mei[1] == 3 ) ? 0 : 1 );
- if ((kb = KYB_read(1,&en)) != 0xffff)
- keymod(kb);
- if (mb) {
- if ( mx2 >= WX1 && mx2 <= WX2 &&
- my2 >= WY1 && my2 <= WY2 )
- mnw( mb, mx, my ); /* 編集窓 */
- else if ( mx2 >= BX1 && mx2 <= BX2 &&
- my2 >= BY1 && my2 <= BY2 )
- mbuff( mb, mx, my ); /* バッファ */
- else if ( my2 >= PALY && my2 < (PALY+PALB*3) &&
- mx2 >= PALX && mx2 < PALX + 128)
- mcolm( mb, mx, my ); /* カラーボックス */
- else if ( mx >= MEX1 && my >= MEY1 && mx < MEX1 + MEX4 * MEX2 &&
- MEZ0 > ((mx-MEX1) / MEX4) + MEX2*(( my-MEY1 ) /MEY4 ))
- gmenu( mx, my ); /* 編集メニュー */
- else if ( mx2 >= PCX1 && mx2 <= PCX2 &&
- my2 >= PCY1 && my2 <= PCY2 )
- mcolm2( mb ); /* ボタンへ色セット */
- else if ( mx2 >= PRX1 && mx2 <= PRX2 &&
- my2 >= PRY1 && my2 <= PRY2 )
- mcols( mcl[2-bc] );
- else if ( mx2 >= PLX1 && mx2 <= PLX2 &&
- my2 >= PLY1 && my2 <= PLY2 )
- mcols( mcl[1+bc] );
- else if ( mx >= PAX1 && mx <= PAX2 &&
- my >= PAY1 && my <= PAY2 )
- pbtn( mb ); /* ページ変更 */
- else if ( mx >= SPX1 && mx <= SPX2 &&
- my >= SPY1 && my <= SPY2 )
- mspoit();
- else if ( mx2 >= CBX1 && mx2 <= CBX2 &&
- my2 >= CBY1 && my2 <= CBY2 )
- tclc(mb, mx, my);
- else if ( mx2 >= CBLX1 && mx2 <= CBLX2 &&
- my2 >= CBLY1 && my2 <= CBLY2 )
- colmix(mb, 0);
- else if ( mx2 >= CBRX1 && mx2 <= CBRX2 &&
- my2 >= CBRY1 && my2 <= CBRY2 )
- colmix(mb, 1);
- else if ( mx2 >= NX1 && mx2 <= NX2 &&
- my2 >= NY1 && my2 <= NY2 && NX4!=128 )
- wsize(mb, 0);
- else if ( mx2 >= PALX-12 && mx2 <= PALX-4 &&
- my2 >= PALY && my2<= PALY+PALB*3-1 )
- hsrg(2);
- else if ( mx >= HX1 && mx <= HX2 &&
- my >= HY1 && my <= HY2 )
- bfgs(mb);
- else if ( mx >= RX1 && mx <= RX2 &&
- my >= RY1 && my <= RY2 )
- rchc();
- else if ( mx >= VX1 && mx <= VX2 &&
- my >= VY1 && my <= VY2 )
- svpp(mx);
- else if ( mx2 >= CSX1 && mx2 <= CSX2 &&
- my2 >= CSY1 && my2 <= CSY2 )
- cols16(mb, mx2, my2);
- else if ( mx >= CSBX1 && mx <= CSBX2 &&
- my >= CSBY1 && my <= CSBY2 )
- cols16g(mb);
- else if ( my < 20 ) /* MENUバー */
- mosmen( mb, mx, my );
- }
- }
- }
-
- _mwset_up_args() { return 0; } /* argc argvを使わない */
-
- void main()
- {
- int i;
- /* 初期化 */
- EGB_init( work, EgbWorkSize );
- EGB_resolution( work, 0, GM0 );
- EGB_resolution( work, 1, GM1 );
- MOS_start( mwork, MosWorkSize );
- MOS_writePage( 0 );
- mosv( 0, 0, 639, 479 );
- MOS_typeRom2( 81, 1, 1, mpat );
- KYB_init();
- KYB_clic( 1 );
- KYB_setcode( 0x0200);
- kkinit(KAN_SCRN16, KAN_MOSON);
- NX1 = nx[3];
- NY1 = ny[3];
- NX4 = 64/bi;
- NY4 = NX4;
- wb = wallb;
- for (i=0; i<5; i++) {
- wallbl[i] = wb;
- wb+= 32<<(i*2);
- }
- wallbl[5] = &(b[256*512*2-128*128*2]);
- wb = wallbl[3];
- mcl[1] = 0x7fff;
- for (vz=2000; vp0 == NULL; vz--) {
- vp0 = (char *)calloc( (vz+1)*BX4*BY4*Cb/8, 1 );
- }
- vp = vp0;
- draw(); /* 画面作り */
- mouse(); /* メインへ */
- }
-